namespace ThreadDemo;

internal static class ThreadMethod
{
    private static void CallToChildThread()
    {
        // 子线程执行的代码
        Console.WriteLine("线程开始运行-----");
        Thread.Sleep(2000); // 模拟耗时操作
        Console.WriteLine("线程运行完成----");
    }


    private static void MyThreadPool(object? state)
    {
        // 子线程执行的代码
        Console.WriteLine("线程池开始运行----");
        Thread.Sleep(2000); // 模拟耗时操作
        Console.WriteLine("线程池运行完成----");

    }

    private static void MyTaskMethod()
    {
        // 任务执行的代码
        Console.WriteLine("Task 开始运行----");
        Task.Delay(2000).Wait(); // 模拟耗时操作
        Console.WriteLine("Task 运行完成----");
    }


    public static void StartThread1()
    {

        // 创建一个新的线程
        Thread thread = new(CallToChildThread);

        // 启动线程
        thread.Start();

        // 主线程继续执行其他操作
        Console.WriteLine("Main 开始运行.");

        // 等待子线程执行完毕
        thread.Join();

        Console.WriteLine("线程运行结束, 按任意键退出!");
        Console.ReadKey();
    }

    public static void StartThread2()
    {

        // 使用线程池
        ThreadPool.QueueUserWorkItem(MyThreadPool);

        // 主线程执行其他操作
        Console.WriteLine("Main 开始运行.");

        // 模拟处理耗时
        Thread.Sleep(200);

        Console.WriteLine("线程运行结束, 按任意键退出!");
        Console.ReadKey();
    }

    public static void StartThread3()
    {
        // 启动一个Task
        var task = Task.Run(() => MyTaskMethod());

        // 主线程继续执行其他操作
        Console.WriteLine("Main 开始运行.");

        // 等待任务执行完毕
        task.Wait();

        Console.WriteLine("线程运行结束, 按任意键退出!");
        Console.ReadKey();
    }
}
